import chardet


def lrc_parse(path):
    # 打开文件
    file = open(path, "rb")
    encoding = chardet.detect(file.read())['encoding']
    file = open(path, "r", encoding=encoding)
    # 读取文件全部内容
    lrc_list = file.readlines()
    # '[01:48.00],[00:24.00],怀著冷却了的心窝飘远方'
    # 创建字典,存放歌词和时间,key表示时间,value表示歌词
    lrc_result = []
    lrc_info = {}
    # 遍历所有元素,干掉方括号
    for i in lrc_list:
        # 取出方括号并切割歌词字符串
        lrc_word = i.replace("[", "]").strip().split("]")
        # 得到的结果: lrc_word = ['', '01:40.00', '', '00:16.00', '今天我寒夜里看雪飘过']
        # "ti" 代表歌曲名。
        # "ar" 代表艺术家名。
        # "al" 代表专辑名。
        # "by" 代表编辑者（LRC歌词的制作人）。
        # "offset" 代表时间补偿值，用于调整显示的时间快慢。
        for j in range(len(lrc_word) - 1):
            if lrc_word[j]:
                if lrc_word[j].startswith('ti'):
                    lrc_info['ti'] = name_format(lrc_word[j])
                    continue
                elif lrc_word[j].startswith('ar'):
                    lrc_info['ar'] = name_format(lrc_word[j])
                    continue
                elif lrc_word[j].startswith('al'):
                    lrc_info['al'] = name_format(lrc_word[j])
                    continue
                elif lrc_word[j].startswith('au'):
                    lrc_info['au'] = name_format(lrc_word[j])
                    continue
                elif lrc_word[j].startswith('by'):
                    lrc_info['by'] = name_format(lrc_word[j])
                    continue
                elif lrc_word[j].startswith('offset'):
                    lrc_info['offset'] = name_format(lrc_word[j])
                    continue
                # 取最后一个
                if len(lrc_result) > 0:
                    pre_lrc = lrc_result[-1]
                    pre_lrc["end_time"] = _stamp2int(lrc_word[j])
                lrc_result.append({
                    "begin_time": _stamp2int(lrc_word[j]),
                    "end_time": _stamp2int(lrc_word[j]) + 3,
                    "text": lrc_word[-1]
                })
    file.close()
    for key in lrc_result:
        print(key)
    lrc_info['lrc_list'] = lrc_result
    return lrc_info


def name_format(word):
    index_of_colon = word.index(':')
    return word[index_of_colon + 1:]


def _stamp2int(stamp):
    m, s = map(float, stamp.split(':'))
    return m * 60 + s


lrc_parse("./input/mp3/独角戏-许茹芸.lrc")
